#include "gui_buscap_calc.h"
#include "ui_gui_buscap_calc.h"
#include <QString>

gui_buscap_calc::gui_buscap_calc(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::gui_buscap_calc)
{
    setFixedSize(800, 800);
    buscap = new bus_capacitor();

    ui->setupUi(this);

    connect(ui->pre_calculate_btn, &QPushButton::clicked, this, &gui_buscap_calc::calculate_min_buscap_val);
    connect(ui->wcca_btn, &QPushButton::clicked, this, &gui_buscap_calc::check_buscap_param);
}

gui_buscap_calc::~gui_buscap_calc()
{
    delete ui;
}


void gui_buscap_calc::calculate_min_buscap_val()
{
    // 读取控制器参数
    buscap->set_min_work_vol(ui->input_min_work_vol->value());
    buscap->set_efficency(ui->input_controller_effciency->value() * 1e-2); // 百分数转化为浮点数
    buscap->set_max_power(ui->input_max_power->value());
    buscap->set_ripple_voltage(ui->input_max_ripple->value());
    buscap->set_work_freq(ui->input_carry_frequency->value() * 1e3); // 转化为Hz

    // 输出计算结果
    ui->textEdit->append("母线电容计算完成：建议母线电容最小值为:");
    QString cap_val = QString::number(1e6 * buscap->calculate_min_cap_value());
    cap_val += "uF";

    ui->textEdit->append(cap_val);
}

void gui_buscap_calc::check_buscap_param()
{
    // 读取电容参数
    buscap->set_value(ui->input_buscap_val->value() * 1e-6);  // 转化uF为F
    buscap->set_error(ui->input_buscap_err->value() * 1e-2); // 转化百分数为浮点数
    buscap->set_tcr(ui->input_buscap_tcr->value());
    buscap->set_acr(ui->input_buscap_acr->value() * 1e-2);   // 转化百分数为浮点数

    // 参数校验
    double tmp = buscap->wcca(ui->input_max_work_temp->value(), ui->input_work_life->value() * 365 * 24);

    ui->textEdit->append("参数校验完成，当前电容值在极小值时可提供的能量比为：");
    QString result = QString::number(tmp * 100); // 转化为百分数
    result += "%";
    ui->textEdit->append(result);
}
